package com.zzl.bonds.ticket.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzl.bonds.ticket.dto.SubsidiaryQuotaAddDto;
import com.zzl.bonds.ticket.dto.SubsidiaryQuotaUpdateDto;
import com.zzl.bonds.ticket.dto.credit.CreditSelectDto;
import com.zzl.bonds.ticket.entity.SubsidiaryQuotaEntity;
import com.zzl.general.common.exception.SysException;
import com.zzl.general.common.serurity.entity.User;
import com.zzl.general.common.utils.PageUtils;

import java.util.List;
import java.util.Map;

/**
 * 分公司集团授信额度管理
 *
 * @author sunpp
 * @date 2022-03-01 11:26:07
 */
@SuppressWarnings("javadoc")
public interface SubsidiaryQuotaService extends IService<SubsidiaryQuotaEntity> {

    /**
     * 供应商 拒绝签收后 额度的 回滚
     *
     * @param id     额度id
     * @param amount 数量
     * @param user   登录用户
     * @return 核心企业的 授信id
     */
    String rollBackSubQuota(String id, Double amount, User user);

    /**
     * 处理 分公司的 额度的 扣减
     *
     * @param id     额度id
     * @param amount 数量
     * @param user   登录用户
     * @return 核心企业的 授信id
     */
    String handReduceSubQuota(String id, Double amount, User user);

    /**
     * 分公司的 集团授信
     * 处理 核心企业 或者厂子的 的冻结 金额
     * 适用 开立中 转让中 融资中 将金额冻结
     */
    /**
     * @param id     主键id
     * @param amount 金额
     * @param user   登录用户
     */
    String handSubQuota(String id, Double amount, User user);

    /**
     * 根据v 企业id 查找厂子的 集团授信
     *
     * @param enterpriseId 企业id
     * @return 授信情况
     */
    List<CreditSelectDto> getSubQuotaByEnterpriseId(String enterpriseId);

    /**
     * 获取分公司的 额度管理
     *
     * @param coreEnterpriseCreditId 核心企业的 id
     * @return list
     */
    List<SubsidiaryQuotaEntity> getSubQuotaList(String coreEnterpriseCreditId) throws SysException;

    /**
     * 分页查询
     *
     * @param params 查询参数
     * @return 分页数据
     */
    PageUtils queryPage(Map<String, Object> params);

    /**
     * 新增
     *
     * @param subsidiaryQuotaAddDto 新增实体
     * @param user                  当前登录用户
     * @throws SysException 业务异常
     */
    void saveSubsidiaryQuota(SubsidiaryQuotaAddDto subsidiaryQuotaAddDto, User user) throws SysException;

    /**
     * 修改
     *
     * @param subsidiaryQuotaUpdateDto 修改实体
     * @param user                     当前登录用户
     * @throws SysException 业务异常
     */
    void updateSubsidiaryQuotaById(SubsidiaryQuotaUpdateDto subsidiaryQuotaUpdateDto, User user) throws SysException;
}

